package org.n3r.idworker.strategy;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DayPrefixRandomCodeStrategy extends DefaultRandomCodeStrategy {

  private final String dayFormat;
  private String lastDay;

  public DayPrefixRandomCodeStrategy(String dayFormat) {
    this.dayFormat = dayFormat;
  }

  @Override
  public void init() {
    String day = createDate();
    if (day.equals(lastDay)) {
      throw new RuntimeException("init failed for day unrolled");
    }

    lastDay = day;

    availableCodes.clear();
    release();

    prefixIndex = Integer.parseInt(lastDay);
    if (tryUsePrefix()) {
      return;
    }

    throw new RuntimeException("prefix is not available " + prefixIndex);
  }

  private String createDate() {
    return new SimpleDateFormat(dayFormat).format(new Date());
  }

  @Override
  public int next() {
    if (!lastDay.equals(createDate())) {
      init();
    }

    return super.next();
  }
}
